package br.com.webcrm.dao.impl;

import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.webcrm.dao.EventoDAO;
import br.com.webcrm.model.Evento;
import br.com.webcrm.model.Motivo;
import br.com.webcrm.model.enuns.TipoFinalizacaoMotivoEnum;

@Repository(value = "eventoDao")
public class EventoDAOImpl extends BaseDAOImpl<Evento, Integer> implements
		EventoDAO {

	@Autowired
	public EventoDAOImpl(@Qualifier("sessionFactory") SessionFactory factory) {
		super.setSessionFactory(factory);
	}

	@Override
	public Timestamp BuscaDataPrevista(Motivo motivo) {
		Date data = null;
		Calendar cal = Calendar.getInstance();		
	    cal.setTime(new Date());	    
		if (motivo.getTipoFinalizacao().equals(
				TipoFinalizacaoMotivoEnum.D.toString())) {
			cal.add(Calendar.DATE, motivo.getTempoFinalizacao());	
			data = cal.getTime();
			return new Timestamp(data.getTime());
		} else {
			cal.add(Calendar.HOUR_OF_DAY, motivo.getTempoFinalizacao());
			data = cal.getTime();			
			return new Timestamp(data.getTime());
		}
	}

	@Override
	@Transactional(readOnly = false, isolation = Isolation.READ_COMMITTED, rollbackFor = Throwable.class, propagation = Propagation.REQUIRED)
	public Evento consultaEventoPorIdEvento(Integer idEvento) {
		String[] nomes = {"idEvento"};
		Object[] valores = {idEvento};
		return  this.consultarObjeto("Evento.findByIdEvento", nomes, valores);	
	}

	@Override
	public List<Evento> consultaEventosFilhos(Integer idEventoPai) {
		String[] nomes = {"idEventoPai"};
		Object[] valores = {idEventoPai};
		List<Evento> listaEvento = this.consultarPorNamedQueryEParametros("Evento.findEventosFilhos", nomes, valores);
		return listaEvento;
	}

	@Override
	public Evento consultaEventoPorIdEventoAnterior(Integer idEventoAnterior) {
		String[] nomes = {"idEventoAnterior"};
		Object[] valores = {idEventoAnterior};
		return this.consultarObjeto("Evento.findByIdEventoAnterior", nomes, valores);		
	}

	@Override
	public List<Evento> consultaEventosPorIdEventoAnterior(
			Integer idEventoAnterior) {
		String[] nomes = {"idEventoAnterior"};
		Object[] valores = {idEventoAnterior};
		return this.consultarPorNamedQueryEParametros("Evento.findByIdEventoAnterior", nomes, valores);
	}

	@Override
	public List<Evento> consultarEventosPorIdEntidade(Integer idEntidade) {
		String[] nomes = {"idEntidade"};
		Object[] valores = {idEntidade};
		return this.consultarPorNamedQueryEParametros("Evento.findByIdEntidade", nomes, valores);
	}

	@Override
	public List<Evento> consultarEventosPorIdEntidade(Integer idEntidade,
			Integer status) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Evento> consultarEventosCriadosPorIdUsuario(Integer idUsuario) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Evento> consultarEventosRecebidosPorIdUsuario(Integer idUsuario) {
		// TODO Auto-generated method stub
		return null;
	}



}
